/*
 * Copyright (c) 2024 Yunshan Networks
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package utils

// 适用于存放可重用的、小规模对象
type StructBuffer struct {
	items []interface{}
	next  int
	New   func() interface{}
}

func (b *StructBuffer) Slice() []interface{} {
	return b.items[:b.next]
}

func (b *StructBuffer) Get() interface{} {
	if b.next == len(b.items) {
		b.items = append(b.items, b.New())
	}
	b.next++
	return b.items[b.next-1]
}

func (b *StructBuffer) Reset() {
	b.next = 0
}
